package com.xbongbong.saas.domain.dao;

import com.xbongbong.saas.domain.entity.CustomerStatementEntity;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.List;
import java.util.Map;

@Repository
@Mapper
public interface CustomerStatementDao {

    /**
     * 插入数据
     *
     * @param customerStatementEntity 客户对帐单
     * @author yuqian
     * @return 是否成功
     * @date 2019/1/23 20:00
     * @since v1.0
     **/
    Integer insert(CustomerStatementEntity customerStatementEntity);

    /**
     * 批量插入数据
     * @param list
     * @author yuqian
     * @data 2020/8/27 16:18
     */
    void insertBatch(@Param("list")List<CustomerStatementEntity> list);


    /**
     * Description: 根据条件查询customer的数量
     * @param param 参数map
     * @return java.lang.Integer
     * @author 魏荣杰
     * @date 2019/2/18 9:14
     * @since v1.0
     */
    Integer getEntitysCount(@Param("param") Map<String, Object> param);
    /**
     * Description: 根据条件查询customer
     * @param param 参数map
     * @return com.xbongbong.saas.domain.entity.ext.CustomerEntityExt
     * @author 魏荣杰
     * @date 2019/2/18 16:55
     * @since v1.0
     */
    List<CustomerStatementEntity> findEntitys(@Param("param") Map<String, Object> param);

    /**
     * 批量删除对账单里面的信息
     *
     * @param shouldDeleteIdList 需要删除的对账单id
     * @param corpid 公司id
     * @return
     */
    Integer deleteBatch(@Param("list")List<Long> shouldDeleteIdList, @Param("corpid")String corpid);

    /**
     * 批量更新特定字段
     * @param list
     * @param corpid
     * @return
     */
    Integer updateBatch(@Param("list") List<CustomerStatementEntity> list, @Param("corpid") String corpid);

    /**
     * 批量更新特定字段
     * 注：受限于线上未收款状态的旧回款计划，关联信息、金额、时间都可以随意更改，所以该update方法只能同步更新对账日期、应收金额、关联客户等信息。后续资金3期上线后，需要舍弃该方法，或把这些本不应该被改动的信息去掉
     * @param list  数据列表
     * @param corpid 公司id
     * @return java.lang.Integer
     * @author zcp
     * @since v1.0
     * @version v1.0
     */
    Integer updateBatchAbnormal(@Param("list") List<CustomerStatementEntity> list, @Param("corpid") String corpid);

    CustomerStatementEntity getByKey(@Param("key") Long key, @Param("corpid") String corpid);

    /**
     * 获取最大id
     *
     * @param param
     * @return
     */
    Long getMaxId(@Param("param") Map<String, Object> param);
}
